package 算法.NiuKe.TB;

import 算法.NiuKe.TreeNode;

import java.util.ArrayList;

/**
 * @author:谢君臣
 * @Date:2021/5/317:20
 * @version:1.0
 * @function: 给定一个二叉树和一个值 sum，请找出所有的根节点到叶子节点的节点值之和等于 sum 的路径，
 * 例如：
 * 给出如下的二叉树，sum=22，
 */
public class NC6 {
    public static void main(String[] args) {
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(1);
        root.right = new TreeNode(2);
        pathSum(root,5);
    }
    public static ArrayList<ArrayList<Integer>> res = null;
    public static ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        // write code here
        res = new ArrayList<>();
        if (root==null||root.val>sum)
            return res;
        ArrayList<Integer> path = new ArrayList<>();
        getPath(path,root,sum);
        return res;
    }

    private static void getPath(ArrayList<Integer> path, TreeNode root, int sum) {
        if (root!=null){
            path.add(root.val);
            sum -= root.val;
            if (root.left==root.right&&sum==0){ // 叶子节点
                res.add((ArrayList<Integer>) path.clone());
                return;
            }else {
                if (root.left!=null)
                    getPath(path,root.left,sum);
                if (root.right!=null)
                    getPath(path,root.right,sum);
            }
        }
    }
}
